home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src-glu / mipmap.s < prev    next >
Text File  |  1998-12-15  |  31KB  |  1,993 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src-glu/mipmap.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _glTexImage2D
  7.     XREF    _glTexImage1D
  8.     XREF    _glGetIntegerv
  9.     XREF    _malloc
  10.     XREF    _free
  11.     XREF    _std__in
  12.     XREF    _std__out
  13.     XREF    _std__err
  14.  
  15.     SECTION "_gluScaleImage:0",CODE
  16.  
  17.  
  18. ;   glGetIntegerv( GL_UNPACK_SKIP_PIXELS,
  19.     XDEF    _gluScaleImage
  20. _gluScaleImage
  21. L419    EQU    -$12C
  22.     link    a5,#L419
  23.     movem.l    d2-d7/a2-a4,-(a7)
  24.     fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
  25.     movem.l    $8(a5),d0/d5
  26.     movem.l    $14(a5),d7/a3
  27. L235
  28. ;   switch (format)
  29.     sub.l    #$1900,d0
  30.     cmp.l    #$A,d0
  31.     bhi.b    L240
  32.     move.l    L420(pc,d0.l*4),a0
  33.     jmp    (a0)
  34. L420
  35.     dc.l    L236
  36.     dc.l    L236
  37.     dc.l    L236
  38.     dc.l    L236
  39.     dc.l    L236
  40.     dc.l    L236
  41.     dc.l    L236
  42.     dc.l    L238
  43.     dc.l    L239
  44.     dc.l    L236
  45.     dc.l    L237
  46. ;      
  47. L236
  48. ;         components = 1;
  49.     moveq    #1,d4
  50. ;     
  51.     bra.b    L241
  52. L237
  53. ;     components = 2;
  54.     moveq    #2,d4
  55. ;     
  56.     bra.b    L241
  57. L238
  58. ;     components = 3;
  59.     moveq    #3,d4
  60. ;     
  61.     bra.b    L241
  62. L239
  63. ;     components = 4;
  64.     moveq    #4,d4
  65. ;     
  66.     bra.b    L241
  67. L240
  68.     move.l    #$18A24,d0
  69.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  70.     movem.l    (a7)+,d2-d7/a2-a4
  71.     unlk    a5
  72.     rts
  73. L241
  74. ;     return 
  75. ;   switch (typein)
  76.     move.l    d7,d0
  77.     cmp.l    #$1404,d0
  78.     beq.b    L247
  79.     bgt.b    L421
  80.     cmp.l    #$1402,d0
  81.     beq.b    L245
  82.     bgt.b    L422
  83.     cmp.l    #$1400,d0
  84.     beq.b    L243
  85.     cmp.l    #$1401,d0
  86.     beq.b    L242
  87.     bra.b    L249
  88. L422
  89.     bgt.b    L244
  90. L421
  91.     cmp.l    #$1406,d0
  92.     beq.b    L248
  93.     bgt.b    L423
  94.     blt.b    L246
  95. L423
  96.     cmp.l    #$1A00,d0
  97.     beq.b    L249
  98.     bra.b    L249
  99. ;      
  100. L242
  101. ;      case GL_UNSIGNED_BYTE:    sizein = s
  102.     moveq    #1,d2
  103. ;    
  104.     bra.b    L250
  105. L243
  106. ;      case GL_BYTE:        sizein = sizeof(GLbyte);
  107.     moveq    #1,d2
  108. ;    
  109.     bra.b    L250
  110. L244
  111. ;      case GL_UNSIGNED_SHORT:    sizein =
  112.     moveq    #2,d2
  113. ;    
  114.     bra.b    L250
  115. L245
  116. ;      case GL_SHORT:        sizein = sizeof(GLshort);
  117.     moveq    #2,d2
  118. ;    
  119.     bra.b    L250
  120. L246
  121. ;      case GL_UNSIGNED_INT:    sizein = siz
  122.     moveq    #4,d2
  123. ;    
  124.     bra.b    L250
  125. L247
  126. ;      case GL_INT:        sizein = sizeof(GLint);
  127.     moveq    #4,d2
  128. ;        
  129.     bra.b    L250
  130. L248
  131. ;      case GL_FLOAT:        sizein = sizeof(GLfloat);
  132.     moveq    #4,d2
  133. ;    
  134.     bra.b    L250
  135. L249
  136.     move.l    #$500,d0
  137.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  138.     movem.l    (a7)+,d2-d7/a2-a4
  139.     unlk    a5
  140.     rts
  141. L250
  142. ;     return 
  143. ;   switch (typeout)
  144.     move.l    $24(a5),d0
  145.     cmp.l    #$1404,d0
  146.     beq    L256
  147.     bgt.b    L424
  148.     cmp.l    #$1402,d0
  149.     beq.b    L254
  150.     bgt.b    L425
  151.     cmp.l    #$1400,d0
  152.     beq.b    L252
  153.     cmp.l    #$1401,d0
  154.     beq.b    L251
  155.     bra    L258
  156. L425
  157.     bgt.b    L253
  158. L424
  159.     cmp.l    #$1406,d0
  160.     beq.b    L257
  161.     bgt.b    L426
  162.     blt.b    L255
  163. L426
  164.     cmp.l    #$1A00,d0
  165.     beq    L258
  166.     bra.b    L258
  167. ;      
  168. L251
  169. ;      case GL_UNSIGNED_BYTE:    sizeout = 
  170.     move.l    #1,-$48(a5)
  171. ;    
  172.     bra    L259
  173. L252
  174. ;      case GL_BYTE:        sizeout = sizeof(GLbyte);
  175.     move.l    #1,-$48(a5)
  176. ;    
  177.     bra.b    L259
  178. L253
  179. ;      case GL_UNSIGNED_SHORT:    sizeout 
  180.     move.l    #2,-$48(a5)
  181. ;    
  182.     bra.b    L259
  183. L254
  184. ;      case GL_SHORT:        sizeout = sizeof(GLshort)
  185.     move.l    #2,-$48(a5)
  186. ;    
  187.     bra.b    L259
  188. L255
  189. ;      case GL_UNSIGNED_INT:    sizeout = si
  190.     move.l    #4,-$48(a5)
  191. ;    
  192.     bra.b    L259
  193. L256
  194. ;      case GL_INT:        sizeout = sizeof(GLint);
  195.     move.l    #4,-$48(a5)
  196. ;    
  197.     bra.b    L259
  198. L257
  199. ;      case GL_FLOAT:        sizeout = sizeof(GLfloat)
  200.     move.l    #4,-$48(a5)
  201. ;    
  202.     bra.b    L259
  203. L258
  204.     move.l    #$500,d0
  205.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  206.     movem.l    (a7)+,d2-d7/a2-a4
  207.     unlk    a5
  208.     rts
  209. L259
  210. ;     return 
  211. ;   glGetIntegerv( GL_UNPACK_ROW_LENGTH, &unpackrowlength );
  212.     pea    -$24(a5)
  213.     pea    $CF2.w
  214.     jsr    _glGetIntegerv
  215.     addq.w    #$8,a7
  216. ;   glGetIntegerv( GL_UNPACK_ALIGNMENT, &unpackalignment );
  217.     pea    -$28(a5)
  218.     pea    $CF5.w
  219.     jsr    _glGetIntegerv
  220.     addq.w    #$8,a7
  221. ;   glGetIntegerv( GL_UNPACK_SKIP_ROWS, &unpackskiprows );
  222.     pea    -$2C(a5)
  223.     pea    $CF3.w
  224.     jsr    _glGetIntegerv
  225.     addq.w    #$8,a7
  226. ;   glGetIntegerv( GL_UNPACK_SKIP_PIXELS, &unpackskippixels );
  227.     pea    -$30(a5)
  228.     pea    $CF4.w
  229.     jsr    _glGetIntegerv
  230.     addq.w    #$8,a7
  231. ;   glGetIntegerv( GL_PACK_ROW_LENGTH, &packrowlength );
  232.     pea    -$34(a5)
  233.     pea    $D02.w
  234.     jsr    _glGetIntegerv
  235.     addq.w    #$8,a7
  236. ;   glGetIntegerv( GL_PACK_ALIGNMENT, &packalignment );
  237.     pea    -$38(a5)
  238.     pea    $D05.w
  239.     jsr    _glGetIntegerv
  240.     addq.w    #$8,a7
  241. ;   glGetIntegerv( GL_PACK_SKIP_ROWS, &packskiprows );
  242.     pea    -$3C(a5)
  243.     pea    $D03.w
  244.     jsr    _glGetIntegerv
  245.     addq.w    #$8,a7
  246. ;   glGetIntegerv( GL_PACK_SKIP_PIXELS, &packskippixels );
  247.     pea    -$40(a5)
  248.     pea    $D04.w
  249.     jsr    _glGetIntegerv
  250.     addq.w    #$8,a7
  251. ;   tempin = (GLfloat *) malloc( widthin * heightin
  252.     move.l    d5,d0
  253.     muls.l    $10(a5),d0
  254.     muls.l    d4,d0
  255.     moveq    #2,d1
  256.     asl.l    d1,d0
  257.     move.l    d0,-(a7)
  258.     jsr    _malloc
  259.     addq.w    #4,a7
  260.     move.l    d0,a2
  261. ;   if (!tempin) 
  262.     cmp.w    #0,a2
  263.     bne.b    L261
  264. L260
  265.     move.l    #$18A26,d0
  266.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  267.     movem.l    (a7)+,d2-d7/a2-a4
  268.     unlk    a5
  269.     rts
  270. L261
  271. ;   tempout = (GLfloat *) malloc( widthout * heightout
  272.     move.l    $1C(a5),d0
  273.     muls.l    $20(a5),d0
  274.     muls.l    d4,d0
  275.     moveq    #2,d1
  276.     asl.l    d1,d0
  277.     move.l    d0,-(a7)
  278.     jsr    _malloc
  279.     addq.w    #4,a7
  280.     move.l    d0,-$18(a5)
  281. ;   if (!tempout) 
  282.     tst.l    -$18(a5)
  283.     bne.b    L263
  284. L262
  285. ;      free( tempin );
  286.     move.l    a2,-(a7)
  287.     jsr    _free
  288.     addq.w    #4,a7
  289.     move.l    #$18A26,d0
  290.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  291.     movem.l    (a7)+,d2-d7/a2-a4
  292.     unlk    a5
  293.     rts
  294. L263
  295. ;   if (unpackrowlength>0) 
  296.     move.l    -$24(a5),d0
  297.     cmp.l    #0,d0
  298.     ble.b    L265
  299. L264
  300. ;      rowlen = unpackrowlength;
  301.     move.l    -$24(a5),d1
  302.     bra.b    L266
  303. L265
  304. ;      rowlen = widthin;
  305.     move.l    d5,d1
  306. L266
  307. ;   if (sizein >= unpackalignment) 
  308.     cmp.l    -$28(a5),d2
  309.     blt.b    L268
  310. L267
  311. ;      rowstride = components * rowlen;
  312.     move.l    d4,d0
  313.     muls.l    d1,d0
  314.     bra    L272
  315. L268
  316. ;      rowstride = unpackalignment/sizein
  317.     move.l    -$28(a5),d0
  318.     divsl.l    d2,d0
  319.     move.l    d4,d3
  320.     muls.l    d1,d3
  321.     muls.l    d2,d3
  322.     divsl.l    -$28(a5),d6:d3
  323.     tst.l    d6
  324.     bne.b    L270
  325. L269
  326.     muls.l    d4,d1
  327.     muls.l    d2,d1
  328.     divsl.l    -$28(a5),d1
  329.     bra.b    L271
  330. L270
  331.     muls.l    d4,d1
  332.     muls.l    d2,d1
  333.     divsl.l    -$28(a5),d1
  334.     addq.l    #1,d1
  335. L271
  336.     muls.l    d1,d0
  337. L272
  338. ;   switch (typein)
  339.     move.l    d7,d1
  340.     sub.l    #$1400,d1
  341.     cmp.l    #6,d1
  342.     bhi    L322
  343.     move.l    L427(pc,d1.l*4),a0
  344.     jmp    (a0)
  345. L427
  346.     dc.l    L280
  347.     dc.l    L273
  348.     dc.l    L294
  349.     dc.l    L287
  350.     dc.l    L308
  351.     dc.l    L301
  352.     dc.l    L315
  353. ;      
  354. L273
  355. ;     k = 0;
  356.     moveq    #0,d2
  357. ;     for (i=0;
  358.     clr.l    -$8(a5)
  359.     bra    L278
  360. L274
  361. ;        GLubyte *ubptr = (GLubyte *) datain
  362.     move.l    -$8(a5),d1
  363.     muls.l    d0,d1
  364.     lea    0(a3,d1.l),a0
  365.     move.l    -$2C(a5),d1
  366.     muls.l    d0,d1
  367.     add.l    d1,a0
  368.     move.l    -$30(a5),d1
  369.     muls.l    d4,d1
  370.     add.l    d1,a0
  371. ;        for (j=0;
  372.     clr.l    -$C(a5)
  373.     bra.b    L276
  374. L275
  375. ;           tempin[k++] = (GLfloat) *ubptr++;
  376.     moveq    #0,d1
  377.     move.b    (a0)+,d1
  378.     fmove.l    d1,fp0
  379.     move.l    d2,d1
  380.     addq.l    #1,d2
  381.     fmove.s    fp0,0(a2,d1.l*4)
  382.     addq.l    #1,-$C(a5)
  383. L276
  384.     move.l    d5,d1
  385.     muls.l    d4,d1
  386.     move.l    -$C(a5),d3
  387.     cmp.l    d1,d3
  388.     blt.b    L275
  389. L277
  390.     addq.l    #1,-$8(a5)
  391. L278
  392.     move.l    -$8(a5),d1
  393.     cmp.l    $10(a5),d1
  394.     blt.b    L274
  395. L279
  396. ;     
  397.     bra    L323
  398. L280
  399. ;     k = 0;
  400.     moveq    #0,d2
  401. ;     for (i=0;
  402.     clr.l    -$8(a5)
  403.     bra    L285
  404. L281
  405. ;        GLbyte *bptr = (GLbyte *) datain
  406.     move.l    -$8(a5),d1
  407.     muls.l    d0,d1
  408.     lea    0(a3,d1.l),a0
  409.     move.l    -$2C(a5),d1
  410.     muls.l    d0,d1
  411.     add.l    d1,a0
  412.     move.l    -$30(a5),d1
  413.     muls.l    d4,d1
  414.     add.l    d1,a0
  415. ;        for (j=0;
  416.     clr.l    -$C(a5)
  417.     bra.b    L283
  418. L282
  419. ;           tempin[k++] = (GLfloat) *bptr++;
  420.     move.b    (a0)+,d1
  421.     extb.l    d1
  422.     fmove.l    d1,fp0
  423.     move.l    d2,d1
  424.     addq.l    #1,d2
  425.     fmove.s    fp0,0(a2,d1.l*4)
  426.     addq.l    #1,-$C(a5)
  427. L283
  428.     move.l    d5,d1
  429.     muls.l    d4,d1
  430.     move.l    -$C(a5),d3
  431.     cmp.l    d1,d3
  432.     blt.b    L282
  433. L284
  434.     addq.l    #1,-$8(a5)
  435. L285
  436.     move.l    -$8(a5),d1
  437.     cmp.l    $10(a5),d1
  438.     blt.b    L281
  439. L286
  440. ;     
  441.     bra    L323
  442. L287
  443. ;     k = 0;
  444.     moveq    #0,d2
  445. ;     for (i=0;
  446.     clr.l    -$8(a5)
  447.     bra    L292
  448. L288
  449. ;        GLushort *usptr = (GLushort *) datain
  450.     move.l    -$8(a5),d1
  451.     muls.l    d0,d1
  452.     lea    0(a3,d1.l*2),a0
  453.     move.l    -$2C(a5),d1
  454.     muls.l    d0,d1
  455.     lea    0(a0,d1.l*2),a0
  456.     move.l    -$30(a5),d1
  457.     muls.l    d4,d1
  458.     lea    0(a0,d1.l*2),a0
  459. ;        for (j=0;
  460.     clr.l    -$C(a5)
  461.     bra.b    L290
  462. L289
  463. ;           tempin[k++] = (GLfloat) *usptr++;
  464.     moveq    #0,d1
  465.     move.w    (a0)+,d1
  466.     fmove.l    d1,fp0
  467.     move.l    d2,d1
  468.     addq.l    #1,d2
  469.     fmove.s    fp0,0(a2,d1.l*4)
  470.     addq.l    #1,-$C(a5)
  471. L290
  472.     move.l    d5,d1
  473.     muls.l    d4,d1
  474.     move.l    -$C(a5),d3
  475.     cmp.l    d1,d3
  476.     blt.b    L289
  477. L291
  478.     addq.l    #1,-$8(a5)
  479. L292
  480.     move.l    -$8(a5),d1
  481.     cmp.l    $10(a5),d1
  482.     blt.b    L288
  483. L293
  484. ;     
  485.     bra    L323
  486. L294
  487. ;     k = 0;
  488.     moveq    #0,d2
  489. ;     for (i=0;
  490.     clr.l    -$8(a5)
  491.     bra    L299
  492. L295
  493. ;        GLshort *sptr = (GLshort *) datain
  494.     move.l    -$8(a5),d1
  495.     muls.l    d0,d1
  496.     lea    0(a3,d1.l*2),a0
  497.     move.l    -$2C(a5),d1
  498.     muls.l    d0,d1
  499.     lea    0(a0,d1.l*2),a0
  500.     move.l    -$30(a5),d1
  501.     muls.l    d4,d1
  502.     lea    0(a0,d1.l*2),a0
  503. ;        for (j=0;
  504.     clr.l    -$C(a5)
  505.     bra.b    L297
  506. L296
  507. ;           tempin[k++] = (GLfloat) *sptr++;
  508.     move.w    (a0)+,d1
  509.     ext.l    d1
  510.     fmove.l    d1,fp0
  511.     move.l    d2,d1
  512.     addq.l    #1,d2
  513.     fmove.s    fp0,0(a2,d1.l*4)
  514.     addq.l    #1,-$C(a5)
  515. L297
  516.     move.l    d5,d1
  517.     muls.l    d4,d1
  518.     move.l    -$C(a5),d3
  519.     cmp.l    d1,d3
  520.     blt.b    L296
  521. L298
  522.     addq.l    #1,-$8(a5)
  523. L299
  524.     move.l    -$8(a5),d1
  525.     cmp.l    $10(a5),d1
  526.     blt.b    L295
  527. L300
  528. ;     
  529.     bra    L323
  530. L301
  531. ;     k = 0;
  532.     moveq    #0,d2
  533. ;     for (i=0;
  534.     clr.l    -$8(a5)
  535.     bra    L306
  536. L302
  537. ;        GLuint *uiptr = (GLuint *) datain
  538.     move.l    -$8(a5),d1
  539.     muls.l    d0,d1
  540.     lea    0(a3,d1.l*4),a0
  541.     move.l    -$2C(a5),d1
  542.     muls.l    d0,d1
  543.     lea    0(a0,d1.l*4),a0
  544.     move.l    -$30(a5),d1
  545.     muls.l    d4,d1
  546.     lea    0(a0,d1.l*4),a0
  547. ;        for (j=0;
  548.     clr.l    -$C(a5)
  549.     bra.b    L304
  550. L303
  551. ;           tempin[k++] = (GLfloat) *uiptr++;
  552.     fmove.l    (a0)+,fp0
  553.     move.l    d2,d1
  554.     addq.l    #1,d2
  555.     fmove.s    fp0,0(a2,d1.l*4)
  556.     addq.l    #1,-$C(a5)
  557. L304
  558.     move.l    d5,d1
  559.     muls.l    d4,d1
  560.     move.l    -$C(a5),d3
  561.     cmp.l    d1,d3
  562.     blt.b    L303
  563. L305
  564.     addq.l    #1,-$8(a5)
  565. L306
  566.     move.l    -$8(a5),d1
  567.     cmp.l    $10(a5),d1
  568.     blt.b    L302
  569. L307
  570. ;     
  571.     bra    L323
  572. L308
  573. ;     k = 0;
  574.     moveq    #0,d2
  575. ;     for (i=0;
  576.     clr.l    -$8(a5)
  577.     bra    L313
  578. L309
  579. ;        GLint *iptr = (GLint *) datain
  580.     move.l    -$8(a5),d1
  581.     muls.l    d0,d1
  582.     lea    0(a3,d1.l*4),a0
  583.     move.l    -$2C(a5),d1
  584.     muls.l    d0,d1
  585.     lea    0(a0,d1.l*4),a0
  586.     move.l    -$30(a5),d1
  587.     muls.l    d4,d1
  588.     lea    0(a0,d1.l*4),a0
  589. ;        for (j=0;
  590.     clr.l    -$C(a5)
  591.     bra.b    L311
  592. L310
  593. ;           tempin[k++] = (GLfloat) *iptr++;
  594.     fmove.l    (a0)+,fp0
  595.     move.l    d2,d1
  596.     addq.l    #1,d2
  597.     fmove.s    fp0,0(a2,d1.l*4)
  598.     addq.l    #1,-$C(a5)
  599. L311
  600.     move.l    d5,d1
  601.     muls.l    d4,d1
  602.     move.l    -$C(a5),d3
  603.     cmp.l    d1,d3
  604.     blt.b    L310
  605. L312
  606.     addq.l    #1,-$8(a5)
  607. L313
  608.     move.l    -$8(a5),d1
  609.     cmp.l    $10(a5),d1
  610.     blt.b    L309
  611. L314
  612. ;     
  613.     bra    L323
  614. L315
  615. ;     k = 0;
  616.     moveq    #0,d2
  617. ;     for (i=0;
  618.     clr.l    -$8(a5)
  619.     bra    L320
  620. L316
  621. ;        GLfloat *fptr = (GLfloat *) datain
  622.     move.l    -$8(a5),d1
  623.     muls.l    d0,d1
  624.     lea    0(a3,d1.l*4),a0
  625.     move.l    -$2C(a5),d1
  626.     muls.l    d0,d1
  627.     lea    0(a0,d1.l*4),a0
  628.     move.l    -$30(a5),d1
  629.     muls.l    d4,d1
  630.     lea    0(a0,d1.l*4),a0
  631. ;        for (j=0;
  632.     clr.l    -$C(a5)
  633.     bra.b    L318
  634. L317
  635. ;           tempin[k++] = *fptr++;
  636.     move.l    d2,d1
  637.     addq.l    #1,d2
  638.     move.l    (a0)+,0(a2,d1.l*4)
  639.     addq.l    #1,-$C(a5)
  640. L318
  641.     move.l    d5,d1
  642.     muls.l    d4,d1
  643.     move.l    -$C(a5),d3
  644.     cmp.l    d1,d3
  645.     blt.b    L317
  646. L319
  647.     addq.l    #1,-$8(a5)
  648. L320
  649.     move.l    -$8(a5),d1
  650.     cmp.l    $10(a5),d1
  651.     blt.b    L316
  652. L321
  653. ;     
  654.     bra    L323
  655. L322
  656.     move.l    #$18A24,d0
  657.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  658.     movem.l    (a7)+,d2-d7/a2-a4
  659.     unlk    a5
  660.     rts
  661. L323
  662. ;     return 
  663. ;   sx = (GLfloat) (widthin-1) / (GLfloat) (widthout-1);
  664.     move.l    d5,d0
  665.     subq.l    #1,d0
  666.     fmove.l    d0,fp5
  667.     move.l    $1C(a5),d0
  668.     subq.l    #1,d0
  669.     fmove.l    d0,fp0
  670.     fdiv.x    fp0,fp5
  671. ;   sy = (GLfloat) (heightin-1) / (GLfloat) (heightout-1);
  672.     move.l    $10(a5),d0
  673.     subq.l    #1,d0
  674.     fmove.l    d0,fp0
  675.     fmove.s    fp0,fp7
  676.     move.l    $20(a5),d0
  677.     subq.l    #1,d0
  678.     fmove.l    d0,fp0
  679.     fmove.x    fp7,fp1
  680.     fdiv.x    fp0,fp1
  681.     fmove.s    fp1,fp7
  682. ;   if (sx<1.0 && sy<1.0) 
  683.     fmove.x    fp5,fp0
  684.     fcmp.d    #$.3FF00000.00000000,fp0
  685.     fboge.b    L339
  686. L324
  687.     fmove.x    fp7,fp0
  688.     fcmp.d    #$.3FF00000.00000000,fp0
  689.     fboge.b    L339
  690. L325
  691. ;      for (i=0;
  692.     clr.l    -$8(a5)
  693.     bra    L337
  694. L326
  695. ;     i0 = i * sy;
  696.     fmove.l    -$8(a5),fp0
  697.     fmul.x    fp7,fp0
  698.     fmove.l    fp0,d0
  699.     move.l    d0,d7
  700. ;     i1 = i0 + 1;
  701.     move.l    d7,d3
  702.     addq.l    #1,d3
  703. ;     if (i1 >= heightin) 
  704.     cmp.l    $10(a5),d3
  705.     blt.b    L328
  706. L327
  707. ;     if (i1 >= heightin) i1 = heightin-1;
  708.     move.l    $10(a5),d3
  709.     subq.l    #1,d3
  710. L328
  711. ;     alpha = i*sy - i0;
  712.     fmove.l    -$8(a5),fp3
  713.     fmul.x    fp7,fp3
  714.     fmove.l    d7,fp0
  715.     fsub.x    fp0,fp3
  716. ;     for (j=0;
  717.     clr.l    -$C(a5)
  718.     bra    L335
  719. L329
  720. ;        j0 = j * sx;
  721.     fmove.l    -$C(a5),fp0
  722.     fmul.x    fp5,fp0
  723.     fmove.l    fp0,d2
  724. ;        j1 = j0 + 1;
  725.     move.l    d2,d1
  726.     addq.l    #1,d1
  727. ;        if (j1 >= widthin) 
  728.     cmp.l    d5,d1
  729.     blt.b    L331
  730. L330
  731. ;        if (j1 >= widthin) j1 = widthin-1;
  732.     move.l    d5,d1
  733.     subq.l    #1,d1
  734. L331
  735. ;        beta = j*sx - j0;
  736.     fmove.l    -$C(a5),fp1
  737.     fmul.x    fp5,fp1
  738.     fmove.l    d2,fp0
  739.     fsub.x    fp0,fp1
  740. ;        src00 = tempin + (i0 * widthin + j0) * components;
  741.     move.l    d7,d0
  742.     muls.l    d5,d0
  743.     add.l    d2,d0
  744.     muls.l    d4,d0
  745.     asl.l    #2,d0
  746.     add.l    a2,d0
  747.     move.l    d0,-$6C(a5)
  748. ;        src01 = tempin + (i0 * widthin + j1) * components;
  749.     move.l    d7,d0
  750.     muls.l    d5,d0
  751.     add.l    d1,d0
  752.     muls.l    d4,d0
  753.     asl.l    #2,d0
  754.     add.l    a2,d0
  755.     move.l    d0,-$70(a5)
  756. ;        src10 = tempin + (i1 * widthin + j0) * components;
  757.     move.l    d3,d0
  758.     muls.l    d5,d0
  759.     add.l    d2,d0
  760.     muls.l    d4,d0
  761.     asl.l    #2,d0
  762.     add.l    a2,d0
  763.     move.l    d0,a4
  764. ;        src11 = tempin + (i1 * widthin + j1) * components;
  765.     move.l    d3,d0
  766.     muls.l    d5,d0
  767.     add.l    d1,d0
  768.     muls.l    d4,d0
  769.     lea    0(a2,d0.l*4),a1
  770. ;        dst = tempout + (i * widthout + j) * components;
  771.     move.l    -$8(a5),d0
  772.     muls.l    $1C(a5),d0
  773.     add.l    -$C(a5),d0
  774.     muls.l    d4,d0
  775.     move.l    -$18(a5),a3
  776.     lea    0(a3,d0.l*4),a0
  777. ;        for (k=0;
  778.     moveq    #0,d2
  779.     bra    L333
  780. L332
  781. ;           s1 = *src00++ * (1.0-beta) + *src01++ * beta;
  782.     move.l    -$6C(a5),a3
  783.     moveq    #4,d0
  784.     add.l    d0,-$6C(a5)
  785.     fmove.s    (a3),fp0
  786.     fmove.x    fp1,fp2
  787.     fmove.d    #$.3FF00000.00000000,fp4
  788.     fsub.x    fp2,fp4
  789.     fmul.x    fp4,fp0
  790.     move.l    -$70(a5),a3
  791.     moveq    #4,d0
  792.     add.l    d0,-$70(a5)
  793.     fmove.s    (a3),fp2
  794.     fmul.x    fp1,fp2
  795.     fadd.x    fp2,fp0
  796.     fmove.x    fp0,fp4
  797. ;           s2 = *src10++ * (1.0-beta) + *src11++ * beta;
  798.     fmove.s    (a4)+,fp0
  799.     fmove.x    fp1,fp2
  800.     fmove.d    #$.3FF00000.00000000,fp6
  801.     fsub.x    fp2,fp6
  802.     fmul.x    fp6,fp0
  803.     fmove.s    (a1)+,fp2
  804.     fmul.x    fp1,fp2
  805.     fadd.x    fp2,fp0
  806.     fmove.x    fp0,fp2
  807. ;           *dst++ = s1 * (1.0-alpha) + s2 * alpha;
  808.     fmove.x    fp4,fp0
  809.     fmove.x    fp3,fp4
  810.     fmove.d    #$.3FF00000.00000000,fp6
  811.     fsub.x    fp4,fp6
  812.     fmul.x    fp6,fp0
  813.     fmul.x    fp3,fp2
  814.     fadd.x    fp2,fp0
  815.     fmove.s    fp0,(a0)+
  816.     addq.l    #1,d2
  817. L333
  818.     cmp.l    d4,d2
  819.     blt    L332
  820. L334
  821.     addq.l    #1,-$C(a5)
  822. L335
  823.     move.l    -$C(a5),d0
  824.     cmp.l    $1C(a5),d0
  825.     blt    L329
  826. L336
  827.     addq.l    #1,-$8(a5)
  828. L337
  829.     move.l    -$8(a5),d0
  830.     cmp.l    $20(a5),d0
  831.     blt    L326
  832. L338
  833.     bra    L358
  834. L339
  835. ;      for (i=0;
  836.     clr.l    -$8(a5)
  837.     bra    L357
  838. L340
  839. ;     i0 = i * sy;
  840.     fmove.l    -$8(a5),fp0
  841.     fmul.x    fp7,fp0
  842.     fmove.l    fp0,d0
  843.     move.l    d0,-$64(a5)
  844. ;     i1 = i0 + 1;
  845.     move.l    -$64(a5),d0
  846.     addq.l    #1,d0
  847.     move.l    d0,-$68(a5)
  848. ;     if (i1 >= heightin) 
  849.     move.l    -$68(a5),d0
  850.     cmp.l    $10(a5),d0
  851.     blt.b    L342
  852. L341
  853. ;     if (i1 >= heightin) i1 = heightin-1;
  854.     move.l    $10(a5),d0
  855.     subq.l    #1,d0
  856.     move.l    d0,-$68(a5)
  857. L342
  858. ;     for (j=0;
  859.     clr.l    -$C(a5)
  860.     bra    L355
  861. L343
  862. ;        j0 = j * sx;
  863.     fmove.l    -$C(a5),fp0
  864.     fmul.x    fp5,fp0
  865.     fmove.l    fp0,d0
  866.     move.l    d0,-$6C(a5)
  867. ;        j1 = j0 + 1;
  868.     move.l    -$6C(a5),d0
  869.     addq.l    #1,d0
  870.     move.l    d0,d7
  871. ;        if (j1 >= widthin) 
  872.     move.l    d7,d0
  873.     cmp.l    d5,d0
  874.     blt.b    L345
  875. L344
  876. ;        if (j1 >= widthin) j1 = widthin-1;
  877.     move.l    d5,d0
  878.     subq.l    #1,d0
  879.     move.l    d0,d7
  880. L345
  881. ;        dst = tempout + (i * widthout + j) * components;
  882.     move.l    -$8(a5),d0
  883.     muls.l    $1C(a5),d0
  884.     add.l    -$C(a5),d0
  885.     muls.l    d4,d0
  886.     move.l    -$18(a5),a0
  887.     lea    0(a0,d0.l*4),a1
  888. ;        for (k=0;
  889.     moveq    #0,d2
  890.     bra    L353
  891. L346
  892. ;           sum = 0.0;
  893.     fmove.s    #$.00000000,fp0
  894. ;           for (ii=i0;
  895.     move.l    -$64(a5),d3
  896.     bra    L351
  897. L347
  898. ;          for (jj=j0;
  899.     move.l    -$6C(a5),d1
  900.     bra    L349
  901. L348
  902. ;             sum += *(tempin + (ii * widthin + jj) * components + k)
  903.     move.l    d3,d0
  904.     muls.l    d5,d0
  905.     add.l    d1,d0
  906.     muls.l    d4,d0
  907.     lea    0(a2,d0.l*4),a0
  908.     fadd.s    0(a0,d2.l*4),fp0
  909.     addq.l    #1,d1
  910. L349
  911.     cmp.l    d7,d1
  912.     ble.b    L348
  913. L350
  914.     addq.l    #1,d3
  915. L351
  916.     cmp.l    -$68(a5),d3
  917.     ble.b    L347
  918. L352
  919. ;           sum /= (j1-j0+1) * (i1-i0+1);
  920.     move.l    d7,d0
  921.     sub.l    -$6C(a5),d0
  922.     addq.l    #1,d0
  923.     move.l    -$68(a5),d1
  924.     sub.l    -$64(a5),d1
  925.     addq.l    #1,d1
  926.     muls.l    d1,d0
  927.     fmove.l    d0,fp1
  928.     fdiv.x    fp1,fp0
  929. ;           *dst++ = sum;
  930.     fmove.s    fp0,(a1)+
  931.     addq.l    #1,d2
  932. L353
  933.     cmp.l    d4,d2
  934.     blt.b    L346
  935. L354
  936.     addq.l    #1,-$C(a5)
  937. L355
  938.     move.l    -$C(a5),d0
  939.     cmp.l    $1C(a5),d0
  940.     blt    L343
  941. L356
  942.     addq.l    #1,-$8(a5)
  943. L357
  944.     move.l    -$8(a5),d0
  945.     cmp.l    $20(a5),d0
  946.     blt    L340
  947. L358
  948. ;   if (packrowlength>0) 
  949.     move.l    -$34(a5),d0
  950.     cmp.l    #0,d0
  951.     ble    L360
  952. L359
  953. ;      rowlen = packrowlength;
  954.     move.l    -$34(a5),d1
  955.     bra    L361
  956. L360
  957. ;      rowlen = widthout;
  958.     move.l    $1C(a5),d1
  959. L361
  960. ;   if (sizeout >= packalignment) 
  961.     move.l    -$48(a5),d0
  962.     cmp.l    -$38(a5),d0
  963.     blt    L363
  964. L362
  965. ;      rowstride = components * rowlen;
  966.     move.l    d4,d0
  967.     muls.l    d1,d0
  968.     bra    L367
  969. L363
  970. ;      rowstride = packalignment/sizeout
  971.     move.l    -$38(a5),d0
  972.     divsl.l    -$48(a5),d0
  973.     move.l    d4,d2
  974.     muls.l    d1,d2
  975.     muls.l    -$48(a5),d2
  976.     divsl.l    -$38(a5),d3:d2
  977.     tst.l    d3
  978.     bne    L365
  979. L364
  980.     muls.l    d4,d1
  981.     muls.l    -$48(a5),d1
  982.     divsl.l    -$38(a5),d1
  983.     bra    L366
  984. L365
  985.     muls.l    d4,d1
  986.     muls.l    -$48(a5),d1
  987.     divsl.l    -$38(a5),d1
  988.     addq.l    #1,d1
  989. L366
  990.     muls.l    d1,d0
  991. L367
  992. ;   switch (typeout)
  993.     move.l    $24(a5),d1
  994.     sub.l    #$1400,d1
  995.     cmp.l    #6,d1
  996.     bhi    L417
  997.     move.l    L428(pc,d1.l*4),a0
  998.     jmp    (a0)
  999. L428
  1000.     dc.l    L375
  1001.     dc.l    L368
  1002.     dc.l    L389
  1003.     dc.l    L382
  1004.     dc.l    L403
  1005.     dc.l    L396
  1006.     dc.l    L410
  1007. ;      
  1008. L368
  1009. ;     k = 0;
  1010.     moveq    #0,d2
  1011. ;     for (i=0;
  1012.     clr.l    -$8(a5)
  1013.     bra    L373
  1014. L369
  1015. ;        GLubyte *ubptr = (GLubyte *) dataout
  1016.     move.l    -$8(a5),d1
  1017.     muls.l    d0,d1
  1018.     move.l    $28(a5),a1
  1019.     lea    0(a1,d1.l),a0
  1020.     move.l    -$3C(a5),d1
  1021.     muls.l    d0,d1
  1022.     add.l    d1,a0
  1023.     move.l    -$40(a5),d1
  1024.     muls.l    d4,d1
  1025.     add.l    d1,a0
  1026. ;        for (j=0;
  1027.     clr.l    -$C(a5)
  1028.     bra    L371
  1029. L370
  1030. ;           *ubptr++ = (GLubyte) tempout[k++];
  1031.     move.l    d2,d1
  1032.     addq.l    #1,d2
  1033.     move.l    -$18(a5),a3
  1034.     fmove.s    0(a3,d1.l*4),fp0
  1035.     fmove.l    fp0,d1
  1036.     move.b    d1,(a0)+
  1037.     addq.l    #1,-$C(a5)
  1038. L371
  1039.     move.l    $1C(a5),d1
  1040.     muls.l    d4,d1
  1041.     move.l    -$C(a5),d3
  1042.     cmp.l    d1,d3
  1043.     blt.b    L370
  1044. L372
  1045.     addq.l    #1,-$8(a5)
  1046. L373
  1047.     move.l    -$8(a5),d1
  1048.     cmp.l    $20(a5),d1
  1049.     blt.b    L369
  1050. L374
  1051. ;     
  1052.     bra    L418
  1053. L375
  1054. ;     k = 0;
  1055.     moveq    #0,d2
  1056. ;     for (i=0;
  1057.     clr.l    -$8(a5)
  1058.     bra    L380
  1059. L376
  1060. ;        GLbyte *bptr = (GLbyte *) dataout
  1061.     move.l    -$8(a5),d1
  1062.     muls.l    d0,d1
  1063.     move.l    $28(a5),a1
  1064.     lea    0(a1,d1.l),a0
  1065.     move.l    -$3C(a5),d1
  1066.     muls.l    d0,d1
  1067.     add.l    d1,a0
  1068.     move.l    -$40(a5),d1
  1069.     muls.l    d4,d1
  1070.     add.l    d1,a0
  1071. ;        for (j=0;
  1072.     clr.l    -$C(a5)
  1073.     bra    L378
  1074. L377
  1075. ;           *bptr++ = (GLbyte) tempout[k++];
  1076.     move.l    d2,d1
  1077.     addq.l    #1,d2
  1078.     move.l    -$18(a5),a3
  1079.     fmove.s    0(a3,d1.l*4),fp0
  1080.     fmove.l    fp0,d1
  1081.     move.b    d1,(a0)+
  1082.     addq.l    #1,-$C(a5)
  1083. L378
  1084.     move.l    $1C(a5),d1
  1085.     muls.l    d4,d1
  1086.     move.l    -$C(a5),d3
  1087.     cmp.l    d1,d3
  1088.     blt.b    L377
  1089. L379
  1090.     addq.l    #1,-$8(a5)
  1091. L380
  1092.     move.l    -$8(a5),d1
  1093.     cmp.l    $20(a5),d1
  1094.     blt.b    L376
  1095. L381
  1096. ;     
  1097.     bra    L418
  1098. L382
  1099. ;     k = 0;
  1100.     moveq    #0,d2
  1101. ;     for (i=0;
  1102.     clr.l    -$8(a5)
  1103.     bra    L387
  1104. L383
  1105. ;        GLushort *usptr = (GLushort *) dataout
  1106.     move.l    -$8(a5),d1
  1107.     muls.l    d0,d1
  1108.     move.l    $28(a5),a1
  1109.     lea    0(a1,d1.l*2),a0
  1110.     move.l    -$3C(a5),d1
  1111.     muls.l    d0,d1
  1112.     lea    0(a0,d1.l*2),a0
  1113.     move.l    -$40(a5),d1
  1114.     muls.l    d4,d1
  1115.     lea    0(a0,d1.l*2),a0
  1116. ;        for (j=0;
  1117.     clr.l    -$C(a5)
  1118.     bra    L385
  1119. L384
  1120. ;           *usptr++ = (GLushort) tempout[k++];
  1121.     move.l    d2,d1
  1122.     addq.l    #1,d2
  1123.     move.l    -$18(a5),a3
  1124.     fmove.s    0(a3,d1.l*4),fp0
  1125.     fmove.l    fp0,d1
  1126.     move.w    d1,(a0)+
  1127.     addq.l    #1,-$C(a5)
  1128. L385
  1129.     move.l    $1C(a5),d1
  1130.     muls.l    d4,d1
  1131.     move.l    -$C(a5),d3
  1132.     cmp.l    d1,d3
  1133.     blt.b    L384
  1134. L386
  1135.     addq.l    #1,-$8(a5)
  1136. L387
  1137.     move.l    -$8(a5),d1
  1138.     cmp.l    $20(a5),d1
  1139.     blt.b    L383
  1140. L388
  1141. ;     
  1142.     bra    L418
  1143. L389
  1144. ;     k = 0;
  1145.     moveq    #0,d2
  1146. ;     for (i=0;
  1147.     clr.l    -$8(a5)
  1148.     bra    L394
  1149. L390
  1150. ;        GLshort *sptr = (GLshort *) dataout
  1151.     move.l    -$8(a5),d1
  1152.     muls.l    d0,d1
  1153.     move.l    $28(a5),a1
  1154.     lea    0(a1,d1.l*2),a0
  1155.     move.l    -$3C(a5),d1
  1156.     muls.l    d0,d1
  1157.     lea    0(a0,d1.l*2),a0
  1158.     move.l    -$40(a5),d1
  1159.     muls.l    d4,d1
  1160.     lea    0(a0,d1.l*2),a0
  1161. ;        for (j=0;
  1162.     clr.l    -$C(a5)
  1163.     bra    L392
  1164. L391
  1165. ;           *sptr++ = (GLshort) tempout[k++];
  1166.     move.l    d2,d1
  1167.     addq.l    #1,d2
  1168.     move.l    -$18(a5),a3
  1169.     fmove.s    0(a3,d1.l*4),fp0
  1170.     fmove.l    fp0,d1
  1171.     move.w    d1,(a0)+
  1172.     addq.l    #1,-$C(a5)
  1173. L392
  1174.     move.l    $1C(a5),d1
  1175.     muls.l    d4,d1
  1176.     move.l    -$C(a5),d3
  1177.     cmp.l    d1,d3
  1178.     blt.b    L391
  1179. L393
  1180.     addq.l    #1,-$8(a5)
  1181. L394
  1182.     move.l    -$8(a5),d1
  1183.     cmp.l    $20(a5),d1
  1184.     blt.b    L390
  1185. L395
  1186. ;     
  1187.     bra    L418
  1188. L396
  1189. ;     k = 0;
  1190.     moveq    #0,d2
  1191. ;     for (i=0;
  1192.     clr.l    -$8(a5)
  1193.     bra    L401
  1194. L397
  1195. ;        GLuint *uiptr = (GLuint *) dataout
  1196.     move.l    -$8(a5),d1
  1197.     muls.l    d0,d1
  1198.     move.l    $28(a5),a1
  1199.     lea    0(a1,d1.l*4),a0
  1200.     move.l    -$3C(a5),d1
  1201.     muls.l    d0,d1
  1202.     lea    0(a0,d1.l*4),a0
  1203.     move.l    -$40(a5),d1
  1204.     muls.l    d4,d1
  1205.     lea    0(a0,d1.l*4),a0
  1206. ;        for (j=0;
  1207.     clr.l    -$C(a5)
  1208.     bra    L399
  1209. L398
  1210. ;           *uiptr++ = (GLuint) tempout[k++];
  1211.     move.l    d2,d1
  1212.     addq.l    #1,d2
  1213.     move.l    -$18(a5),a3
  1214.     fmove.s    0(a3,d1.l*4),fp0
  1215.     fmove.l    fp0,d1
  1216.     move.l    d1,(a0)+
  1217.     addq.l    #1,-$C(a5)
  1218. L399
  1219.     move.l    $1C(a5),d1
  1220.     muls.l    d4,d1
  1221.     move.l    -$C(a5),d3
  1222.     cmp.l    d1,d3
  1223.     blt.b    L398
  1224. L400
  1225.     addq.l    #1,-$8(a5)
  1226. L401
  1227.     move.l    -$8(a5),d1
  1228.     cmp.l    $20(a5),d1
  1229.     blt.b    L397
  1230. L402
  1231. ;     
  1232.     bra    L418
  1233. L403
  1234. ;     k = 0;
  1235.     moveq    #0,d2
  1236. ;     for (i=0;
  1237.     clr.l    -$8(a5)
  1238.     bra    L408
  1239. L404
  1240. ;        GLint *iptr = (GLint *) dataout
  1241.     move.l    -$8(a5),d1
  1242.     muls.l    d0,d1
  1243.     move.l    $28(a5),a1
  1244.     lea    0(a1,d1.l*4),a0
  1245.     move.l    -$3C(a5),d1
  1246.     muls.l    d0,d1
  1247.     lea    0(a0,d1.l*4),a0
  1248.     move.l    -$40(a5),d1
  1249.     muls.l    d4,d1
  1250.     lea    0(a0,d1.l*4),a0
  1251. ;        for (j=0;
  1252.     clr.l    -$C(a5)
  1253.     bra    L406
  1254. L405
  1255. ;           *iptr++ = (GLint) tempout[k++];
  1256.     move.l    d2,d1
  1257.     addq.l    #1,d2
  1258.     move.l    -$18(a5),a3
  1259.     fmove.s    0(a3,d1.l*4),fp0
  1260.     fmove.l    fp0,d1
  1261.     move.l    d1,(a0)+
  1262.     addq.l    #1,-$C(a5)
  1263. L406
  1264.     move.l    $1C(a5),d1
  1265.     muls.l    d4,d1
  1266.     move.l    -$C(a5),d3
  1267.     cmp.l    d1,d3
  1268.     blt.b    L405
  1269. L407
  1270.     addq.l    #1,-$8(a5)
  1271. L408
  1272.     move.l    -$8(a5),d1
  1273.     cmp.l    $20(a5),d1
  1274.     blt.b    L404
  1275. L409
  1276. ;     
  1277.     bra    L418
  1278. L410
  1279. ;     k = 0;
  1280.     moveq    #0,d2
  1281. ;     for (i=0;
  1282.     clr.l    -$8(a5)
  1283.     bra    L415
  1284. L411
  1285. ;        GLfloat *fptr = (GLfloat *) dataout
  1286.     move.l    -$8(a5),d1
  1287.     muls.l    d0,d1
  1288.     move.l    $28(a5),a1
  1289.     lea    0(a1,d1.l*4),a0
  1290.     move.l    -$3C(a5),d1
  1291.     muls.l    d0,d1
  1292.     lea    0(a0,d1.l*4),a0
  1293.     move.l    -$40(a5),d1
  1294.     muls.l    d4,d1
  1295.     lea    0(a0,d1.l*4),a0
  1296. ;        for (j=0;
  1297.     clr.l    -$C(a5)
  1298.     bra    L413
  1299. L412
  1300. ;           *fptr++ = tempout[k++];
  1301.     move.l    d2,d1
  1302.     addq.l    #1,d2
  1303.     move.l    -$18(a5),a3
  1304.     fmove.s    0(a3,d1.l*4),fp0
  1305.     fmove.s    fp0,(a0)+
  1306.     addq.l    #1,-$C(a5)
  1307. L413
  1308.     move.l    $1C(a5),d1
  1309.     muls.l    d4,d1
  1310.     move.l    -$C(a5),d3
  1311.     cmp.l    d1,d3
  1312.     blt.b    L412
  1313. L414
  1314.     addq.l    #1,-$8(a5)
  1315. L415
  1316.     move.l    -$8(a5),d1
  1317.     cmp.l    $20(a5),d1
  1318.     blt.b    L411
  1319. L416
  1320. ;     
  1321.     bra    L418
  1322. L417
  1323.     move.l    #$18A24,d0
  1324.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  1325.     movem.l    (a7)+,d2-d7/a2-a4
  1326.     unlk    a5
  1327.     rts
  1328. L418
  1329. ;     return 
  1330. ;   free( tempin );
  1331.     move.l    a2,-(a7)
  1332.     jsr    _free
  1333.     addq.w    #4,a7
  1334. ;   free( tempout );
  1335.     move.l    -$18(a5),-(a7)
  1336.     jsr    _free
  1337.     addq.w    #4,a7
  1338.     moveq    #0,d0
  1339.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  1340.     movem.l    (a7)+,d2-d7/a2-a4
  1341.     unlk    a5
  1342.     rts
  1343.  
  1344.     SECTION "_ilog2:0",CODE
  1345.  
  1346.     rts
  1347.  
  1348. ;static GLint ilog2( GLint n )
  1349. _ilog2
  1350.     move.l    d2,-(a7)
  1351.     move.l    $8(a7),d1
  1352. L429
  1353. ;   if (n<=0) 
  1354.     cmp.l    #0,d1
  1355.     bgt.b    L431
  1356. L430
  1357.     moveq    #0,d0
  1358.     move.l    (a7)+,d2
  1359.     rts
  1360. L431
  1361. ;   for (k=0;
  1362.     moveq    #0,d0
  1363.     bra.b    L433
  1364. L432
  1365.     addq.l    #1,d0
  1366. L433
  1367.     moveq    #1,d2
  1368.     asr.l    d2,d1
  1369.     tst.l    d1
  1370.     bne.b    L432
  1371. L434
  1372.     move.l    (a7)+,d2
  1373.     rts
  1374.  
  1375.     SECTION "_round2:0",CODE
  1376.  
  1377.  
  1378. ;static GLint round2( GLint n )
  1379. _round2
  1380.     movem.l    d2-d4,-(a7)
  1381.     move.l    $10(a7),d1
  1382. L435
  1383. ;   for (m=1;
  1384.     moveq    #1,d0
  1385.     bra.b    L437
  1386. L436
  1387.     moveq    #1,d2
  1388.     asl.l    d2,d0
  1389. L437
  1390.     cmp.l    d1,d0
  1391.     blt.b    L436
  1392. L438
  1393. ;   if (m-n <= n-m/2) 
  1394.     move.l    d0,d3
  1395.     sub.l    d1,d3
  1396.     move.l    d0,d2
  1397.     divsl.l    #2,d2
  1398.     sub.l    d2,d1
  1399.     cmp.l    d1,d3
  1400.     bgt.b    L440
  1401. L439
  1402.     movem.l    (a7)+,d2-d4
  1403.     rts
  1404. L440
  1405.     divsl.l    #2,d0
  1406.     movem.l    (a7)+,d2-d4
  1407.     rts
  1408.  
  1409.     SECTION "_bytes_per_pixel:0",CODE
  1410.  
  1411.  
  1412. ;static GLint bytes_per_pixel( GLenum format, GLenum type )
  1413. _bytes_per_pixel
  1414.     movem.l    4(a7),d0/d1
  1415. L441
  1416. ;   switch (format)
  1417.     sub.l    #$1900,d0
  1418.     cmp.l    #$A,d0
  1419.     bhi.b    L446
  1420.     move.l    L458(pc,d0.l*4),a0
  1421.     jmp    (a0)
  1422. L458
  1423.     dc.l    L442
  1424.     dc.l    L442
  1425.     dc.l    L442
  1426.     dc.l    L442
  1427.     dc.l    L442
  1428.     dc.l    L442
  1429.     dc.l    L442
  1430.     dc.l    L444
  1431.     dc.l    L445
  1432.     dc.l    L442
  1433.     dc.l    L443
  1434. ;      
  1435. L442
  1436. ;     n = 1;
  1437.     moveq    #1,d0
  1438. ;     
  1439.     bra.b    L447
  1440. L443
  1441. ;     n = 2;
  1442.     moveq    #2,d0
  1443. ;     
  1444.     bra.b    L447
  1445. L444
  1446. ;     n = 3;
  1447.     moveq    #3,d0
  1448. ;     
  1449.     bra.b    L447
  1450. L445
  1451. ;     n = 4;
  1452.     moveq    #4,d0
  1453. ;     
  1454.     bra.b    L447
  1455. L446
  1456. ;     n = 0;
  1457.     moveq    #0,d0
  1458. L447
  1459. ;   switch (type)
  1460.     cmp.l    #$1404,d1
  1461.     beq.b    L454
  1462.     bgt.b    L459
  1463.     cmp.l    #$1402,d1
  1464.     beq.b    L452
  1465.     bgt.b    L460
  1466.     cmp.l    #$1400,d1
  1467.     beq.b    L449
  1468.     cmp.l    #$1401,d1
  1469.     beq.b    L448
  1470.     bra.b    L456
  1471. L460
  1472.     bgt.b    L451
  1473. L459
  1474.     cmp.l    #$1406,d1
  1475.     beq.b    L455
  1476.     bgt.b    L461
  1477.     blt.b    L453
  1478. L461
  1479.     cmp.l    #$1A00,d1
  1480.     beq.b    L450
  1481.     bra.b    L456
  1482. ;      
  1483. L448
  1484. ;      case GL_UNSIGNED_BYTE:    m = sizeof
  1485.     moveq    #1,d1
  1486. ;    
  1487.     bra.b    L457
  1488. L449
  1489. ;      case GL_BYTE:        m = sizeof(GLbyte);
  1490.     moveq    #1,d1
  1491. ;    
  1492.     bra.b    L457
  1493. L450
  1494. ;      case GL_BITMAP:        m = 1;
  1495.     moveq    #1,d1
  1496. ;            
  1497.     bra.b    L457
  1498. L451
  1499. ;      case GL_UNSIGNED_SHORT:    m = size
  1500.     moveq    #2,d1
  1501. ;    
  1502.     bra.b    L457
  1503. L452
  1504. ;      case GL_SHORT:        m = sizeof(GLshort);
  1505.     moveq    #2,d1
  1506. ;    
  1507.     bra.b    L457
  1508. L453
  1509. ;      case GL_UNSIGNED_INT:    m = sizeof(G
  1510.     moveq    #4,d1
  1511. ;    
  1512.     bra.b    L457
  1513. L454
  1514. ;      case GL_INT:        m = sizeof(GLint);
  1515.     moveq    #4,d1
  1516. ;    
  1517.     bra.b    L457
  1518. L455
  1519. ;      case GL_FLOAT:        m = sizeof(GLfloat);
  1520.     moveq    #4,d1
  1521. ;    
  1522.     bra.b    L457
  1523. L456
  1524. ;      default:            m = 0;
  1525.     moveq    #0,d1
  1526. L457
  1527.     muls.l    d1,d0
  1528.     rts
  1529.  
  1530.     SECTION "_gluBuild1DMipmaps:0",CODE
  1531.  
  1532.  
  1533. ;GLint APIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
  1534.     XDEF    _gluBuild1DMipmaps
  1535. _gluBuild1DMipmaps
  1536. L491    EQU    -$34
  1537.     link    a5,#L491
  1538.     movem.l    d2-d7/a2/a3,-(a7)
  1539.     movem.l    $18(a5),d2/a3
  1540.     move.l    $C(a5),d3
  1541. L462
  1542. ;   if (width < 1)
  1543.     move.l    $10(a5),d0
  1544.     cmp.l    #1,d0
  1545.     bge.b    L464
  1546. L463
  1547.     move.l    #$18A25,d0
  1548.     movem.l    (a7)+,d2-d7/a2/a3
  1549.     unlk    a5
  1550.     rts
  1551. L464
  1552. ;   glGetIntegerv( GL_MAX_TEXTURE_SIZE, &max_width );
  1553.     pea    -$14(a5)
  1554.     pea    $D33.w
  1555.     jsr    _glGetIntegerv
  1556.     addq.w    #$8,a7
  1557. ;   max_levels = ilog2( max_width ) + 1;
  1558.     move.l    -$14(a5),-(a7)
  1559.     jsr    _ilog2
  1560.     addq.w    #4,a7
  1561.     addq.l    #1,d0
  1562.     move.l    d0,-$C(a5)
  1563. ;   levels = ilog2( width ) + 1;
  1564.     move.l    $10(a5),-(a7)
  1565.     jsr    _ilog2
  1566.     addq.w    #4,a7
  1567.     addq.l    #1,d0
  1568.     move.l    d0,-$8(a5)
  1569. ;   if (levels>max_levels) 
  1570.     move.l    -$8(a5),d0
  1571.     cmp.l    -$C(a5),d0
  1572.     ble.b    L466
  1573. L465
  1574. ;      levels = max_levels;
  1575.     move.l    -$C(a5),-$8(a5)
  1576. L466
  1577. ;   new_width = 1 << (levels-1);
  1578.     move.l    -$8(a5),d0
  1579.     subq.l    #1,d0
  1580.     moveq    #1,d5
  1581.     asl.l    d0,d5
  1582. ;   texture = (GLubyte *) malloc( new_width * components );
  1583.     move.l    d5,d0
  1584.     muls.l    d3,d0
  1585.     move.l    d0,-(a7)
  1586.     jsr    _malloc
  1587.     addq.w    #4,a7
  1588.     move.l    d0,a2
  1589. ;   if (!texture) 
  1590.     cmp.w    #0,a2
  1591.     bne.b    L468
  1592. L467
  1593.     move.l    #$18A26,d0
  1594.     movem.l    (a7)+,d2-d7/a2/a3
  1595.     unlk    a5
  1596.     rts
  1597. L468
  1598. ;   if (width != new_width) 
  1599.     move.l    $10(a5),d0
  1600.     cmp.l    d5,d0
  1601.     beq.b    L478
  1602. L469
  1603. ;      switch (type)
  1604.     cmp.l    #$1401,d2
  1605.     beq.b    L470
  1606.     bra.b    L477
  1607. ;     
  1608. L470
  1609. ;           GLubyte *ub_data = (GLubyte *) data;
  1610.     move.l    a3,a1
  1611. ;           for (i=0;
  1612.     moveq    #0,d4
  1613.     bra.b    L475
  1614. L471
  1615. ;          j = i * width / new_width;
  1616.     move.l    d4,d0
  1617.     muls.l    $10(a5),d0
  1618.     divsl.l    d5,d0
  1619.     move.l    d0,d7
  1620. ;          for (k=0;
  1621.     moveq    #0,d1
  1622.     bra.b    L473
  1623. L472
  1624. ;             texture[i*components+k] = ub_data[j*components+k];
  1625.     move.l    d7,d0
  1626.     muls.l    d3,d0
  1627.     add.l    d1,d0
  1628.     move.b    0(a1,d0.l),d2
  1629.     move.l    d4,d0
  1630.     muls.l    d3,d0
  1631.     add.l    d1,d0
  1632.     move.b    d2,0(a2,d0.l)
  1633.     addq.l    #1,d1
  1634. L473
  1635.     cmp.l    d3,d1
  1636.     blt.b    L472
  1637. L474
  1638.     addq.l    #1,d4
  1639. L475
  1640.     cmp.l    d5,d4
  1641.     blt.b    L471
  1642. L476
  1643. ;        
  1644.     bra.b    L478
  1645. L477
  1646.     move.l    #$18707,d0
  1647.     movem.l    (a7)+,d2-d7/a2/a3
  1648.     unlk    a5
  1649.     rts
  1650. L478
  1651. ;   for (l=0;
  1652.     moveq    #0,d7
  1653.     bra    L486
  1654. L479
  1655. ;      glTexImage1D( GL_TEXTURE_1D, l, components, new_width, 0
  1656.     move.l    a2,-(a7)
  1657.     pea    $1401.w
  1658.     move.l    $14(a5),-(a7)
  1659.     clr.l    -(a7)
  1660.     move.l    d5,-(a7)
  1661.     move.l    d3,-(a7)
  1662.     move.l    d7,-(a7)
  1663.     pea    $DE0.w
  1664.     jsr    _glTexImage1D
  1665.     add.w    #$20,a7
  1666. ;      new_width = new_width / 2;
  1667.     divsl.l    #2,d5
  1668. ;      for (i=0;
  1669.     moveq    #0,d4
  1670.     bra.b    L484
  1671. L480
  1672. ;     for (k=0;
  1673.     moveq    #0,d1
  1674.     bra.b    L482
  1675. L481
  1676. ;        sample1 = (GLint) texture[i*2*components+k];
  1677.     move.l    d4,d0
  1678.     moveq    #1,d2
  1679.     asl.l    d2,d0
  1680.     muls.l    d3,d0
  1681.     add.l    d1,d0
  1682.     moveq    #0,d2
  1683.     move.b    0(a2,d0.l),d2
  1684. ;        sample2 = (GLint) texture[(i*2+1)*components+k];
  1685.     move.l    d4,d0
  1686.     moveq    #1,d6
  1687.     asl.l    d6,d0
  1688.     addq.l    #1,d0
  1689.     muls.l    d3,d0
  1690.     add.l    d1,d0
  1691.     move.b    0(a2,d0.l),d0
  1692.     and.l    #$FF,d0
  1693. ;        texture[i*components+k] = (GLubyte) ((sample1 + sample2) /
  1694.     add.l    d0,d2
  1695.     divsl.l    #2,d2
  1696.     move.l    d4,d0
  1697.     muls.l    d3,d0
  1698.     add.l    d1,d0
  1699.     move.b    d2,0(a2,d0.l)
  1700.     addq.l    #1,d1
  1701. L482
  1702.     cmp.l    d3,d1
  1703.     blt.b    L481
  1704. L483
  1705.     addq.l    #1,d4
  1706. L484
  1707.     cmp.l    d5,d4
  1708.     blt.b    L480
  1709. L485
  1710.     move.l    d7,d0
  1711.     addq.l    #1,d0
  1712.     move.l    d0,d7
  1713. L486
  1714.     move.l    d7,d0
  1715.     cmp.l    -$8(a5),d0
  1716.     blt    L479
  1717. L487
  1718. ;   free( texture );
  1719.     move.l    a2,-(a7)
  1720.     jsr    _free
  1721.     addq.w    #4,a7
  1722. ;   for (l=levels;
  1723.     move.l    -$8(a5),d7
  1724.     bra.b    L489
  1725. L488
  1726. ;      glTexImage1D( GL_TEXTURE_1D, l, components, 0, 0,
  1727.     clr.l    -(a7)
  1728.     pea    $1401.w
  1729.     move.l    $14(a5),-(a7)
  1730.     clr.l    -(a7)
  1731.     clr.l    -(a7)
  1732.     move.l    d3,-(a7)
  1733.     move.l    d7,-(a7)
  1734.     pea    $DE0.w
  1735.     jsr    _glTexImage1D
  1736.     add.w    #$20,a7
  1737.     move.l    d7,d0
  1738.     addq.l    #1,d0
  1739.     move.l    d0,d7
  1740. L489
  1741.     move.l    d7,d0
  1742.     cmp.l    -$C(a5),d0
  1743.     blt.b    L488
  1744. L490
  1745.     moveq    #0,d0
  1746.     movem.l    (a7)+,d2-d7/a2/a3
  1747.     unlk    a5
  1748.     rts
  1749.  
  1750.     SECTION "_gluBuild2DMipmaps:0",CODE
  1751.  
  1752.  
  1753. ;GLint APIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
  1754.     XDEF    _gluBuild2DMipmaps
  1755. _gluBuild2DMipmaps
  1756. L530    EQU    -$28
  1757.     link    a5,#L530
  1758.     movem.l    d2-d7/a2-a4,-(a7)
  1759.     move.l    $14(a5),d4
  1760.     move.l    $10(a5),d5
  1761.     move.l    $1C(a5),d6
  1762.     move.l    $20(a5),a4
  1763. L492
  1764. ;   if (width < 1 || height < 1)
  1765.     cmp.l    #1,d5
  1766.     blt.b    L494
  1767. L493
  1768.     cmp.l    #1,d4
  1769.     bge.b    L495
  1770. L494
  1771.     move.l    #$18A25,d0
  1772.     movem.l    (a7)+,d2-d7/a2-a4
  1773.     unlk    a5
  1774.     rts
  1775. L495
  1776. ;   glGetIntegerv( GL_MAX_TEXTURE_SIZE, &maxsize );
  1777.     pea    -$C(a5)
  1778.     pea    $D33.w
  1779.     jsr    _glGetIntegerv
  1780.     addq.w    #$8,a7
  1781. ;   w = round2( width );
  1782.     move.l    d5,-(a7)
  1783.     jsr    _round2
  1784.     addq.w    #4,a7
  1785.     move.l    d0,d3
  1786. ;   if (w>maxsize) 
  1787.     cmp.l    -$C(a5),d3
  1788.     ble.b    L497
  1789. L496
  1790. ;      w = maxsize;
  1791.     move.l    -$C(a5),d3
  1792. L497
  1793. ;   h = round2( height );
  1794.     move.l    d4,-(a7)
  1795.     jsr    _round2
  1796.     addq.w    #4,a7
  1797.     move.l    d0,d2
  1798. ;   if (h>maxsize) 
  1799.     cmp.l    -$C(a5),d2
  1800.     ble.b    L499
  1801. L498
  1802. ;      h = maxsize;
  1803.     move.l    -$C(a5),d2
  1804. L499
  1805. ;   bpp = bytes_per_pixel( format, type );
  1806.     move.l    d6,-(a7)
  1807.     move.l    $18(a5),-(a7)
  1808.     jsr    _bytes_per_pixel
  1809.     addq.w    #$8,a7
  1810.     move.l    d0,-$24(a5)
  1811. ;   if (bpp==0) 
  1812.     tst.l    -$24(a5)
  1813.     bne.b    L501
  1814. L500
  1815.     move.l    #$18A24,d0
  1816.     movem.l    (a7)+,d2-d7/a2-a4
  1817.     unlk    a5
  1818.     rts
  1819. L501
  1820. ;   if (w!=width || h!=height) 
  1821.     cmp.l    d5,d3
  1822.     bne.b    L503
  1823. L502
  1824.     cmp.l    d4,d2
  1825.     beq.b    L508
  1826. L503
  1827. ;      image = malloc( (w+4) * h * bpp );
  1828.     move.l    d3,d0
  1829.     addq.l    #4,d0
  1830.     muls.l    d2,d0
  1831.     muls.l    -$24(a5),d0
  1832.     move.l    d0,-(a7)
  1833.     jsr    _malloc
  1834.     addq.w    #4,a7
  1835.     move.l    d0,a2
  1836. ;      if (!image) 
  1837.     cmp.w    #0,a2
  1838.     bne.b    L505
  1839. L504
  1840.     move.l    #$18A26,d0
  1841.     movem.l    (a7)+,d2-d7/a2-a4
  1842.     unlk    a5
  1843.     rts
  1844. L505
  1845. ;      error = gluScaleImage( format, width, height, type, data
  1846.     move.l    a2,-(a7)
  1847.     move.l    d6,-(a7)
  1848.     move.l    d2,-(a7)
  1849.     move.l    d3,-(a7)
  1850.     move.l    a4,-(a7)
  1851.     move.l    d6,-(a7)
  1852.     move.l    d4,-(a7)
  1853.     move.l    d5,-(a7)
  1854.     move.l    $18(a5),-(a7)
  1855.     jsr    _gluScaleImage
  1856.     add.w    #$24,a7
  1857. ;      if (error) 
  1858.     tst.l    d0
  1859.     beq.b    L507
  1860. L506
  1861.     movem.l    (a7)+,d2-d7/a2-a4
  1862.     unlk    a5
  1863.     rts
  1864. L507
  1865. ;     return 
  1866.     bra.b    L509
  1867. L508
  1868. ;      image = (void *) data;
  1869.     move.l    a4,a2
  1870. L509
  1871. ;   level = 0;
  1872.     moveq    #0,d7
  1873. ;   while (1) 
  1874.     bra    L526
  1875. L510
  1876. ;      glTexImage2D( target, level, components, w, h, 0, format
  1877.     move.l    a2,-(a7)
  1878.     move.l    d6,-(a7)
  1879.     move.l    $18(a5),-(a7)
  1880.     clr.l    -(a7)
  1881.     move.l    d2,-(a7)
  1882.     move.l    d3,-(a7)
  1883.     move.l    $C(a5),-(a7)
  1884.     move.l    d7,-(a7)
  1885.     move.l    $8(a5),-(a7)
  1886.     jsr    _glTexImage2D
  1887.     add.w    #$24,a7
  1888. ;      if (w==1 && h==1)  
  1889.     cmp.l    #1,d3
  1890.     bne.b    L513
  1891. L511
  1892.     cmp.l    #1,d2
  1893.     bne.b    L513
  1894. L512
  1895. ;      if (w==1 && h==1)  
  1896.     bra    L527
  1897. L513
  1898. ;      neww = (w<2) ? 1 : w/2;
  1899.     cmp.l    #2,d3
  1900.     bge.b    L515
  1901. L514
  1902.     moveq    #1,d5
  1903.     bra.b    L516
  1904. L515
  1905.     move.l    d3,d5
  1906.     divsl.l    #2,d5
  1907. L516
  1908. ;      newh = (h<2) ? 1 : h/2;
  1909.     cmp.l    #2,d2
  1910.     bge.b    L518
  1911. L517
  1912.     moveq    #1,d4
  1913.     bra.b    L519
  1914. L518
  1915.     move.l    d2,d4
  1916.     divsl.l    #2,d4
  1917. L519
  1918. ;      newimage = malloc( (neww+4) * newh * bpp );
  1919.     move.l    d5,d0
  1920.     addq.l    #4,d0
  1921.     muls.l    d4,d0
  1922.     muls.l    -$24(a5),d0
  1923.     move.l    d0,-(a7)
  1924.     jsr    _malloc
  1925.     addq.w    #4,a7
  1926.     move.l    d0,a3
  1927. ;      if (!newimage) 
  1928.     cmp.w    #0,a3
  1929.     bne.b    L521
  1930. L520
  1931.     move.l    #$18A26,d0
  1932.     movem.l    (a7)+,d2-d7/a2-a4
  1933.     unlk    a5
  1934.     rts
  1935. L521
  1936. ;      error =  gluScaleImage( format, w, h, type, image,
  1937.     move.l    a3,-(a7)
  1938.     move.l    d6,-(a7)
  1939.     move.l    d4,-(a7)
  1940.     move.l    d5,-(a7)
  1941.     move.l    a2,-(a7)
  1942.     move.l    d6,-(a7)
  1943.     move.l    d2,-(a7)
  1944.     move.l    d3,-(a7)
  1945.     move.l    $18(a5),-(a7)
  1946.     jsr    _gluScaleImage
  1947.     add.w    #$24,a7
  1948. ;      if (error) 
  1949.     tst.l    d0
  1950.     beq.b    L523
  1951. L522
  1952.     movem.l    (a7)+,d2-d7/a2-a4
  1953.     unlk    a5
  1954.     rts
  1955. L523
  1956. ;      if (image!=data) 
  1957.     cmp.l    a4,a2
  1958.     beq.b    L525
  1959. L524
  1960. ;     free( image );
  1961.     move.l    a2,-(a7)
  1962.     jsr    _free
  1963.     addq.w    #4,a7
  1964. L525
  1965. ;      image = newimage;
  1966.     move.l    a3,a2
  1967. ;      w = neww;
  1968.     move.l    d5,d3
  1969. ;      h = newh;
  1970.     move.l    d4,d2
  1971. ;      level++;
  1972.     move.l    d7,d0
  1973.     addq.l    #1,d0
  1974.     move.l    d0,d7
  1975. L526
  1976.     bra    L510
  1977. L527
  1978. ;   if (image!=data) 
  1979.     cmp.l    a4,a2
  1980.     beq.b    L529
  1981. L528
  1982. ;      free( image );
  1983.     move.l    a2,-(a7)
  1984.     jsr    _free
  1985.     addq.w    #4,a7
  1986. L529
  1987.     moveq    #0,d0
  1988.     movem.l    (a7)+,d2-d7/a2-a4
  1989.     unlk    a5
  1990.     rts
  1991.  
  1992.     END
  1993.